package jp.ne.iforce.android.wifioffload;

import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.Log;

import com.google.zxing.MultiFormatReader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;

import static jp.ne.iforce.android.wifioffload.BarCodeActivity.TAG;

// 画像byte配列からバーコードの値を解析する
final public class Decoder {

    private final MultiFormatReader mMultiFormatReader;
    private Bitmap mResultBitmap;

    Decoder() {
        Log.d(TAG, "new Decoder");
        mMultiFormatReader = new MultiFormatReader();
    }


    // 解析したバーコード画像を取得する nullが返るかもしれないことに注意
    Bitmap getResultBitmap0() {
        return mResultBitmap;
    }

    /**
     * 引数で渡した画像データからバーコードを解析する
     *
     * @param data 画像データ
     * @param width 画像の幅
     * @param height 画像の高さ
     * @param frame 解析する領域
     * @return Result
     */
    Result decode(byte[] data, int width, int height, Rect frame) {
        Log.d(TAG, "decode");

        if (data == null) {
            return null;
        }

        Result rawResult = null;
        YUVMonochromeBitmapSource source = new YUVMonochromeBitmapSource(data,width, height, frame);

        if (source != null) {
            try {
                rawResult = mMultiFormatReader.decode(source);
                mResultBitmap = source.renderToBitmap();

            } catch (ReaderException e) {
                // Ignore
            }
        }
        return rawResult;
    }
}
